install -d -m 770 -o backup -g backup \
~backup/snapshot/mysql
-snapshot () {
- local database="$1" && shift &&
- test ! -e ~backup/snapshot/mysql/"$database" &&
+trap_exit () {
+ errno=$?
+ test $errno = 0 ||
+ cat >&2 <<-EOF
+ ERROR: $0 "$database" "$@"
+ EOF
+ #return $errno
+ }
+trap trap_exit EXIT
+
+while IFS='' read -r database
+ do
+ test "${database:+set}"
+ test ! -e ~backup/snapshot/mysql/$database
# NOTE: soit une sauvegarde est déjà en cours,
# soit une précédente a échoué.
- can_hotcopy=yes &&
+ can_hotcopy=yes
while IFS=' ' read -r table engine
do
case $engine in
(MyISAM|ARCHIVE) :;;
(*) can_hotcopy=no;;
esac
- done <<-EOF &&
- $(mysql -u backup --batch --skip-column-names <<-EOF || exit 1
+ done <<-EOF
+ $(mysql -u backup --batch --skip-column-names <<-EOF
SELECT table_name,engine
FROM information_schema.tables
WHERE table_schema = '$database';
EOF
case $can_hotcopy in
(yes)
- cd / &&
+ cd /
sudo -u root find ~mysql-data -mindepth 1 -maxdepth 1 -type d -exec \
- install -d -m 750 -o mysql -g backup {} + &&
- cd - >/dev/null 2>&1 &&
- test "${TRACE:+set}" || quiet=--quiet &&
+ install -d -m 750 -o mysql -g backup {} +
+ cd - >/dev/null 2>&1
+ test "${TRACE:+set}" || quiet=--quiet
mysqlhotcopy --method=cp -u backup ${quiet:-} \
"$database" ~backup/snapshot/mysql
;;
(no)
install -d -m 770 -o backup -g backup \
- ~backup/snapshot/mysql/"$database" &&
+ ~backup/snapshot/mysql/"$database"
mysqldump --opt --events -u backup ${TRACE:+--verbose} \
- --result-file ~backup/snapshot/mysql/"$database"/dump.sql \
+ --result-file ~backup/snapshot/mysql/$database/dump.sql \
"$database"
;;
- esac &&
- eval "$@" &&
+ esac
+ eval "$@"
rm -rf \
~backup/snapshot/mysql/"$database"
- }
-
-exit=0
-while IFS=' ' read -r database
- do if ! snapshot "$database" "$@"
- then
- exit=1
- cat >&2 <<-EOF
- ERROR: snapshot "$database" "$@"
- EOF
- fi
done <<-EOF
- $(mysql -u backup --batch --skip-column-names <<-EOF || exit 1
+ $(mysql -u backup --batch --skip-column-names <<-EOF
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name NOT IN ('information_schema', 'performance_schema')
EOF
)
EOF
-exit $exit
install -d -m 770 -o backup -g backup \
~backup/snapshot/postgresql
-snapshot () {
- local database="$1" && shift &&
- test ! -e ~backup/snapshot/postgresql/"$database" &&
+trap_exit () {
+ errno=$?
+ test $errno = 0 ||
+ cat >&2 <<-EOF
+ ERROR: $0 "$database" "$@"
+ EOF
+ #return $errno
+ }
+trap trap_exit EXIT
+
+while IFS=' \r' read -r database
+ do
+ test "${database:+set}"
+ test ! -e ~backup/snapshot/postgresql/"$database"
# NOTE: soit une sauvegarde est déjà en cours,
# soit une précédente a échoué.
install -d -m 770 -o backup -g backup \
- ~backup/snapshot/postgresql/"$database" &&
- psql --quiet "$database" -c "VACUUM (ANALYSE);" &&
+ ~backup/snapshot/postgresql/"$database"
+ psql --quiet "$database" -c "VACUUM (ANALYSE);"
pg_dump --blobs --compress 0 --format custom ${TRACE:+--verbose} \
--file ~backup/snapshot/postgresql/"$database"/dump.sql \
- "$database" &&
- eval "$@" &&
+ "$database"
+ eval "$@"
rm -rf \
- ~backup/snapshot/postgresql/"$database" &&
- :
- }
-
-exit=0
-while IFS=' \r' read -r database
- do if ! snapshot "$database" "$@"
- then
- exit=1
- cat >&2 <<-EOF
- ERROR: snapshot "$database" "$@"
- EOF
- fi
+ ~backup/snapshot/postgresql/"$database"
done <<-EOF
$(psql --quiet --tuples-only postgres <<-EOF || exit 1
\set ON_ERROR_STOP on
EOF
)
EOF
-exit $exit